#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
GPU服务器主应用
提供GFPGAN图片增强API服务（COS URL工作流）
"""

from flask import Flask, request, jsonify
from flask_cors import CORS
import os
import time
import uuid
import logging

# 导入模块
from config import Config
from gfpgan_processor import GFPGANProcessor
from auto_register import AutoRegister
from cleanup_service import cleanup_service

# 配置日志
logging.basicConfig(
    level=getattr(logging, Config.LOG_LEVEL),
    format=Config.LOG_FORMAT
)
logger = logging.getLogger(__name__)

app = Flask(__name__)
CORS(app)

# 使用Config配置
app.config['MAX_CONTENT_LENGTH'] = Config.MAX_CONTENT_LENGTH

# 初始化处理器和自动注册
processor = GFPGANProcessor()
auto_register = AutoRegister()

@app.before_first_request
def init_app():
    """应用启动初始化"""
    logger.info("=" * 60)
    logger.info("GPU服务器初始化")
    logger.info("=" * 60)
    
    # 1. 打印配置信息
    Config.print_config()
    
    # 2. 初始化文件夹
    Config.init_folders()
    
    # 3. 清空临时文件夹（清理上次残留）
    logger.info("清空临时文件夹...")
    Config.cleanup_temp_folders()
    
    # 4. 启动定时清理服务
    logger.info("启动图片清理服务...")
    cleanup_service.start()
    
    # 5. 启动自动注册
    logger.info("启动自动注册服务...")
    auto_register.start()
    
    logger.info("=" * 60)
    logger.info("GPU服务器初始化完成")
    logger.info("=" * 60)

@app.route('/health', methods=['GET'])
def health_check():
    """健康检查"""
    return jsonify({
        'status': 'healthy',
        'service': 'gpu-server',
        'port': Config.SERVER_PORT,
        'internal_ip': Config.INTERNAL_IP,
        'region': Config.REGION,
        'gpu_available': processor.is_gpu_available(),
        'timestamp': time.time()
    })

@app.route('/api/v1/info', methods=['GET'])
def server_info():
    """服务器信息"""
    return jsonify({
        'name': 'PhotoEnhanceAI GPU Server',
        'version': '2.0.0',
        'internal_ip': Config.INTERNAL_IP,
        'region': Config.REGION,
        'gpu_info': processor.get_gpu_info(),
        'endpoints': {
            'enhance': '/api/v1/enhance',
            'health': '/health',
            'info': '/api/v1/info'
        }
    })

@app.route('/api/v1/enhance', methods=['POST'])
def enhance_image():
    """
    图片增强API (COS URL工作流)
    接收COS URL而不是直接上传文件
    """
    try:
        data = request.get_json()
        
        # 验证参数
        if not data or 'image_url' not in data:
            return jsonify({
                'success': False,
                'error': '缺少image_url参数'
            }), 400
        
        image_url = data['image_url']
        quality_level = data.get('quality_level', 'high')
        task_id = str(uuid.uuid4())
        
        logger.info(f"[{task_id}] 收到处理请求: image_url={image_url}, quality={quality_level}")
        
        # 调用处理器（下载→处理→上传→清理）
        result = processor.process_from_url(image_url, task_id, quality_level)
        
        if result['success']:
            return jsonify({
                'success': True,
                'task_id': task_id,
                'status': 'completed',
                'result_url': result['url'],
                'processing_time': result['processing_time']
            }), 200
        else:
            return jsonify({
                'success': False,
                'task_id': task_id,
                'status': 'failed',
                'error': result['error']
            }), 500
            
    except Exception as e:
        logger.error(f"处理请求异常: {e}")
        return jsonify({
            'success': False,
            'error': f'服务器内部错误: {str(e)}'
        }), 500

@app.errorhandler(404)
def not_found(error):
    return jsonify({'error': 'API接口不存在'}), 404

@app.errorhandler(413)
def request_entity_too_large(error):
    return jsonify({'error': '请求数据过大'}), 413

@app.errorhandler(500)
def internal_error(error):
    return jsonify({'error': '服务器内部错误'}), 500

if __name__ == '__main__':
    # 注意：生产环境不应该直接运行此文件
    # 应该使用 Gunicorn: gunicorn -w 1 -b 0.0.0.0:8000 app:app
    logger.warning("=" * 60)
    logger.warning("⚠️  警告：正在使用Flask开发服务器")
    logger.warning("⚠️  生产环境请使用: gunicorn -w 1 -b 0.0.0.0:8000 app:app")
    logger.warning("=" * 60)
    
    app.run(host='0.0.0.0', port=Config.SERVER_PORT, debug=False)
